package thread;

import java.util.Scanner;

// 线程的 中断/终止
public class demo9 {

    public static void main(String[] args) {

        Thread t = new Thread(() -> {
            //  使用 Thread.interrupted() 或者 Thread.currentThread().isInterrupted() 代替自定义标志位.
            //  获取 当前 t 线程的引用
            Thread cur = Thread.currentThread();
            while (!cur.isInterrupted()) {
                System.out.println("hello thread");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    //  throw new RuntimeException(e);

                    //  一旦唤醒 sleep , 通过异常的方式返回
                    //  sleep 会自动把当前线程 中断 的标志位, 重新设置为 false
                    //  e.printStackTrace();

                    break;
                }
            }
            System.out.println("t 线程结束");
        });

        t.start();

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入整数 0, 让 t 线程终止");
        int n = scanner.nextInt();
        if (n == 0) {
            //  interrupt 不仅可以设置标志位, 还能唤醒 sleep 等导致线程阻塞的方法
            //  中断对象关联的线程, 如果线程正在阻塞, 则以异常方式通知, 否则设置标志位
            //  会使 sleep 抛出异常, InterruptedException
            t.interrupt();
        }
    }
}
